home *** CD-ROM | disk | FTP | other *** search
/ Cre@te Online 2000 December / Cre@teOnline CD05.iso / MacSoft / XML ConsoleMax.sea / XML ConsoleMax / Required / esc.jar / com / extensibility / xml / XDRWriter$ElemProxy.class (.txt) < prev    next >
Encoding:
Java Class File  |  2000-06-30  |  6.1 KB  |  198 lines

  1. package com.extensibility.xml;
  2.  
  3. import java.util.Enumeration;
  4.  
  5. public class XDRWriter$ElemProxy extends XDRWriter.DeclProxy {
  6.    // $FF: synthetic field
  7.    final XDRWriter this$0;
  8.    ElementDeclaration decl;
  9.    XDRWriter.AttrProxy attrProxy;
  10.  
  11.    XDRWriter$ElemProxy(XDRWriter var1) {
  12.       super(var1);
  13.       this.this$0 = var1;
  14.       this.attrProxy = new XDRWriter.AttrProxy(this.this$0);
  15.    }
  16.  
  17.    XDRWriter$ElemProxy(XDRWriter var1, ElementDeclaration var2) {
  18.       super(var1);
  19.       this.this$0 = var1;
  20.       this.attrProxy = new XDRWriter.AttrProxy(this.this$0);
  21.       this.setDecl(var2);
  22.    }
  23.  
  24.    void setDecl(ElementDeclaration var1) {
  25.       this.decl = var1;
  26.       super.setDecl(var1);
  27.    }
  28.  
  29.    void writeCPMetaProps(SXE var1, String var2) {
  30.       Enumeration var3 = this.decl.getCPMetaProps(var2);
  31.  
  32.       while(var3 != null && var3.hasMoreElements()) {
  33.          String var4 = (String)var3.nextElement();
  34.          String var5 = (String)this.decl.getCPMetaProp(var2, var4);
  35.          var1.writeLineBreak();
  36.          var1.writeAttr(var4, var5);
  37.       }
  38.  
  39.    }
  40.  
  41.    public void write(SXE var1, boolean var2) {
  42.       var1.writeElem("ElementType");
  43.       var1.writeAttr("name", this.decl.getName());
  44.       this.this$0.writeMetaProps(var1, this.decl.getMetaPropHash(), (BaseDeclaration)null);
  45.       ContentModel var3 = this.decl.getEffectiveModel();
  46.       this.writeModelAttrs(var1, var3);
  47.       if (var2) {
  48.          ((XDRWriter.DeclProxy)this).writeComments(var1);
  49.       }
  50.  
  51.       this.this$0.writeMetaPropSubelements(var1, this.decl.getMetaPropHash());
  52.       Enumeration var4 = this.decl.getAttributes(true);
  53.  
  54.       while(var4.hasMoreElements()) {
  55.          AttributeGroupMember var5 = (AttributeGroupMember)var4.nextElement();
  56.          this.attrProxy.setDecl((AttributeDeclaration)var5);
  57.          this.attrProxy.writeType(var1, var2);
  58.       }
  59.  
  60.       Enumeration var9 = this.decl.getAttributes(true);
  61.  
  62.       while(var9.hasMoreElements()) {
  63.          AttributeGroupMember var6 = (AttributeGroupMember)var9.nextElement();
  64.          this.attrProxy.setDecl((AttributeDeclaration)var6);
  65.          this.attrProxy.writeRef(var1, false);
  66.       }
  67.  
  68.       if (var3.isTagsOnly()) {
  69.          Object var10 = var3.getRootGroup();
  70.          if (var10 == null) {
  71.             var10 = var3;
  72.          }
  73.  
  74.          this.writeModel(var1, (ContentModelTerm)var10, var10 == var3 || this.omitTopGroup((ContentModelTerm)var10));
  75.       } else if (var3.isMixed()) {
  76.          ContentModelTermEnum var11 = ((ContentModelTerm)var3).getLeafTerms();
  77.  
  78.          while(var11.hasMoreElements()) {
  79.             ContentModelTerm var7 = var11.nextContentModelTerm();
  80.             CMTReferent var8 = var7.getReferent();
  81.             if (var8 instanceof ElementDeclaration) {
  82.                var1.writeElem("element", true);
  83.                var1.writeAttr("type", this.this$0.getQName(var7.getTerm(), Class.forName("com.extensibility.xml.ElementDeclaration")));
  84.                this.writeCPMetaProps(var1, var7.getTerm());
  85.             }
  86.          }
  87.       }
  88.  
  89.       var1.flush("ElementType");
  90.    }
  91.  
  92.    String getMinOccurs(ContentModelTerm var1) {
  93.       char var2 = var1.getOccurance();
  94.       if (var2 == 0) {
  95.          return "1";
  96.       } else if (var2 == '?') {
  97.          return "0";
  98.       } else if (var2 == '+') {
  99.          return "1";
  100.       } else if (var2 == '*') {
  101.          return "0";
  102.       } else {
  103.          throw new IllegalArgumentException(String.valueOf("Unknown occurance: ").concat(String.valueOf(var2)));
  104.       }
  105.    }
  106.  
  107.    String getMaxOccurs(ContentModelTerm var1) {
  108.       char var2 = var1.getOccurance();
  109.       if (var2 == 0) {
  110.          return "1";
  111.       } else if (var2 == '?') {
  112.          return "1";
  113.       } else if (var2 == '+') {
  114.          return "*";
  115.       } else if (var2 == '*') {
  116.          return "*";
  117.       } else {
  118.          throw new IllegalArgumentException(String.valueOf("Unknown occurance: ").concat(String.valueOf(var2)));
  119.       }
  120.    }
  121.  
  122.    private boolean omitTopGroup(ContentModelTerm var1) {
  123.       return var1.getOccurance() == 0 || var1.getOccurance() == '*' && var1.getChildConnection() == '|';
  124.    }
  125.  
  126.    void writeModelAttrs(SXE var1, ContentModel var2) {
  127.       if (var2.isAny()) {
  128.          var1.writeAttr("content", "mixed");
  129.          var1.writeAttr("model", "open");
  130.       } else {
  131.          if (var2.isEmpty()) {
  132.             var1.writeAttr("content", "empty");
  133.          } else if (var2.isTextOnly()) {
  134.             var1.writeAttr("content", "textOnly");
  135.             ((XDRWriter.DeclProxy)this).writeDataType(var1, this.decl.getDataType());
  136.          } else if (var2.isTagsOnly()) {
  137.             var1.writeAttr("content", "eltOnly");
  138.             Object var3 = var2.getRootGroup();
  139.             if (var3 == null) {
  140.                var3 = var2;
  141.             }
  142.  
  143.             if (var3 == var2 || this.omitTopGroup((ContentModelTerm)var3)) {
  144.                boolean var4 = ((ContentModelTerm)var3).getChildConnection() == '|' && ((ContentModelTerm)var3).getOccurance() == '*';
  145.                var1.writeAttr("order", ((ContentModelTerm)var3).getChildConnection() == ',' ? "seq" : (var4 ? "many" : "one"));
  146.                if (!var4 && ((ContentModelTerm)var3).getOccurance() != 0) {
  147.                   var1.writeAttr("minOccurs", this.getMinOccurs((ContentModelTerm)var3));
  148.                   var1.writeAttr("maxOccurs", this.getMaxOccurs((ContentModelTerm)var3));
  149.                }
  150.             }
  151.          } else if (var2.isMixed()) {
  152.             var1.writeAttr("content", "mixed");
  153.             var1.writeAttr("order", "many");
  154.          }
  155.  
  156.          if (!var2.isOpen()) {
  157.             var1.writeAttr("model", "closed");
  158.          }
  159.  
  160.       }
  161.    }
  162.  
  163.    void writeModel(SXE var1, ContentModelTerm var2, boolean var3) {
  164.       if (var2.isGroup()) {
  165.          if (!var3) {
  166.             var1.writeElem("group", -1);
  167.             boolean var4 = var2.getChildConnection() == '|' && var2.getOccurance() == '*';
  168.             var1.writeAttr("order", var2.getChildConnection() == ',' ? "seq" : (var4 ? "many" : "one"));
  169.             if (!var4 && !var3 && var2.getOccurance() != 0) {
  170.                var1.writeAttr("minOccurs", this.getMinOccurs(var2));
  171.                var1.writeAttr("maxOccurs", this.getMaxOccurs(var2));
  172.             }
  173.          }
  174.  
  175.          ContentModelTermEnum var6 = var2.getTerms(true);
  176.  
  177.          while(var6.hasMoreElements()) {
  178.             ContentModelTerm var5 = (ContentModelTerm)var6.nextElement();
  179.             this.writeModel(var1, var5, false);
  180.          }
  181.  
  182.          if (!var3) {
  183.             var1.flush("group");
  184.          }
  185.       } else {
  186.          var1.writeElem("element", true);
  187.          var1.writeAttr("type", this.this$0.getQName(var2.getTerm(), Class.forName("com.extensibility.xml.ElementDeclaration")));
  188.          if (var2.getOccurance() != 0) {
  189.             var1.writeAttr("minOccurs", this.getMinOccurs(var2));
  190.             var1.writeAttr("maxOccurs", this.getMaxOccurs(var2));
  191.          }
  192.  
  193.          this.writeCPMetaProps(var1, var2.getTerm());
  194.       }
  195.  
  196.    }
  197. }
  198.